#1

def two_num_sum(arr, target):
  arr.sort()

  l = 0
  r = len(arr) - 1

  answer = 0

  while l < r:
    if target == arr[l] + arr[r]:
      # We got a pair of numbers
      target += 1
    elif target > arr[l] + arr[r]:
      # If the target is bigger, we move l to right
      # to make the sum bigger.
      ++l
    else:
      --r
  
  return answer

#2 考察递归思想

# n - 分钟数
# dangerous_worm 返回 n 分钟后的病毒数
def dangerous_worm(n):
  if n < 5:
    # n 小于 5 时，病毒数都是 1，所以直接返回 1。
    return 1
  else:
    # n >= 5 时，病毒的总数由两部分组成：
    # 一部分是 前一分钟的病毒数，也就是 dangerous_worm(n - 1)
    # 另一部分 四分钟前的病毒数，因为这些病毒在第五分钟后，都会复制一个自己
    # 所以，我们递归调用 dangerous_worm，把 n - 1 和 n - 4 这两个时间
    # 的病毒数相加，就是第 n 分钟的病毒总数了。
    return dangerous_worm(n - 1) + dangerous_worm(n - 4)

